Color management applications often implement high-dimensional Look Up Tables (LUTs) to perform a multi-dimensional interpolation of an input color to map the input color from an input color space to an output color in an output color space. LUTs typically include a large number of uniformly spaced nodes in each color dimension in the input color space, with each dimension having the same number of grid points, to achieve sufficient accuracy for all profiles, intents and options.
However, input color spaces most often have three or more dimensions, resulting in the lookup table consuming a relatively large magnitude of computing resources. For instance, 4 MB may be required per device lookup table for CMYK to CMYK, with only 33 points in each of the color dimensions, and these 33 nodes in each dimension may still not provide an adequate sampling of the space to insure the required color accuracy. Similarly, 150 kB may be required per device lookup table for RGB to CMYK. Thus, lookup table size limits how rapidly a device (e.g., a printer) can switch color options (e.g., input profiles, output profiles, rendering intent, etc.) while processing, since large lookup tables must either be generated on the fly or read into memory from mass storage.
In cases where specialized color operation is required (e.g., Force-Black or Preserve-Black) the overall color space and LUT may become bifurcated. This transition for one locally smooth sub-space (e.g., the modified region) to another sub-space (e.g., the standard region) does not generally lie along a particular axis of the space and thus a higher degree of sampling (finer grid) is required to adequately resolve the transient. While this high sampling of the space is required to cleanly resolve the transition region, it generally over samples the two (relatively smooth) sub spaces as well. This becomes increasingly burdensome on the color management routines as LUT sizes can become increasingly large. For example, a Force-Black/Preserve-Black for a CMYK to CMYK LUT may require upwards of 57 nodes per dimension (and even this is not accurate in all cases) which can lead to LUTs over 40 MB in size.
Accordingly, a mechanism to optimize a color lookup table is desired.